package com.tedu.API;

import org.junit.Test;

public class StringBuilderAPI {
    /**
     * 字符串大量拼接：注意String造成内存溢出
     */
    @Test
    public void testString(){
        String str="字符串";
        for(int i=0;i<10000000;i++){
            str+=i;  //字符串1   2    3 4...
            System.out.println(str);
        }
    }
    /**
     * String-------不可改变对象   BUG （常量池）
     * 假设：拼接处100000000000w个String---内存【开销过大】
     * 操作系统发现内存空间越来越小，会去硬盘上开辟空间---程序、电脑会卡
     *解决方案：不创建新对象，原来对象实现拼接【添加、群换、插入】
     *StringBuilder对象
     * 语法：
     * 可变字符串对象
     *StringBuilder sb=new StringBuilder("字符串")
     * C语言               变量      int  a=malloc(4);  开辟4个字节空间
     *                              a=1
     *                              free(a);    清理内存
     *                              不会存在内存溢出
     *
     * Java语言            变量      int  a=1  内存开辟a空间，保存1.JVM虚拟机提供GC功能
     *                              会存在内存溢出
     */
    @Test
    public void testSB(){
        //创建可变的字符串对象【解决String大量拼接，造成内存溢出】
        String str="你就是我的";
        StringBuilder sb=new StringBuilder(str);
        //append方法  添加新字符串，等同于加号【拼接】
        sb.append("小可爱~");
        System.out.println(sb);
    }
    //**********************************
    /**
     * replace方法        替换       返回值：String
     * 作用：可以将字符串中指定范围内“内容”替换成给定的内容
     *        含头不含尾
     *replace(int start,int end,String str)
     *     开始位置，     结束位置，替换内容
     */
    @Test
    public void testReplace(){
        //创建StringBuilder可变字符串类，构造器中直接传字符串
        StringBuilder sb=new StringBuilder("你就是我的小可爱~");
        sb.replace(5,8,"小Baby");
        System.out.println(sb);
    }

    /**
     * insert方法         插入       返回值：String
     * 作用：将给定的字符串插入到当前字符串中某个位置
     * insert(int index,String str)
     *      插入位置，    插入内容
     */
     @Test
    public void testInsert(){
         //创建可变字符串对象
         StringBuffer sb=new StringBuffer("你是我的小可爱~");
         sb=sb.insert(0,"今天");
         System.out.println(sb);
     }
    /**考试题
     * StringBuilder和StringBuffer的区别？
     * StringBuilder和StringBuffer---方法完全一致【追加、替换、插入】
     * StringBuffer-----JDK1.0------线程安全【效率低】
     * StringBuilder----JDK1.5------线程安不全【效率高】  √
     *
     * 需求说明书：模块用什么类【标注】     业务
     */
}
